using System.Collections.Generic;
using System.Threading.Tasks;
using QFramework;
using UnityEngine;
using UnityEngine.UI;

public class TIManager : MonoBehaviour
{
    //题目
    public Text tiText;
    //答案
    public Text tiOptionA, tiOptionB, tiOptionC, tiOptionD;

    //题的数量
    public Text tiNumText;

    //题的难度
    public Text nanDuText;

    private int TiIDs = 0; //题目的顺序

    public TiData[] tiDatas; //本局选好的题库

    public int tiNum = 10; //本局多少题

    public List<GameObject> needHideList; //在出题之前需要隐藏的节点

    void Awake()
    {
        //请求后台题库
        
        _ = RequestTikuData();
        tiNumText.text = "1/"+tiNum;
        
    }

    void Start()
    {
        StringEventSystem.Global.Register(EventID.NextTi, () =>{
            UpdateTiMu();
        }).UnRegisterWhenGameObjectDestroyed(gameObject);
       
        //将needHideList隐藏
        //这里UI改版之后可能也不需要了，TODO
        foreach (GameObject obj in needHideList)
        {
            obj.SetActive(false);
        }
    }

    private async Task RequestTikuData(){
        tiDatas = await LoadTikuDataAsync();
        if(tiDatas == null) {
            Debug.LogError("题库加载失败");
            // 这里可以添加重试逻辑或错误处理  TODO
        }else{
            UpdateTiMu();
            ToastManager.Instance.ShowToast("题库加载成功");
        }
    }

    //事件处理方法
    private void UpdateTiMu()
    {
        Debug.Log("更新题目");

        GlobalData.SetTiIndex(TiIDs.ToString());
        //例如，重新加载题库数据
        if (TiIDs < tiDatas.Length) // 确保不越界
        {
            tiText.text = tiDatas[TiIDs].question;
            
            // 设置选项文本并调整字号
            SetOptionText(tiOptionA, tiDatas[TiIDs].answers[0]);
            SetOptionText(tiOptionB, tiDatas[TiIDs].answers[1]);
            SetOptionText(tiOptionC, tiDatas[TiIDs].answers[2]);
            SetOptionText(tiOptionD, tiDatas[TiIDs].answers[3]);

            if(tiDatas[TiIDs].difficulty > 0){
                nanDuText.text = "难度："+tiDatas[TiIDs].difficulty.ToString();
            }
           
            PlayerPrefs.SetInt(GameMode.correctAnswer, tiDatas[TiIDs].correctAnswer);

            TiIDs += 1;

            tiNumText.text = TiIDs+ "/"+tiDatas.Length;

            //将needHideList的节点设为可见
            foreach (GameObject obj in needHideList)
            {
                obj.SetActive(true);
            }
        }
        else
        {
            Debug.Log("题目已全部显示完毕");
            //开始结算了，这里做个预防，预防后台发的信息有误
            if(TiIDs == tiNum){
                //准备显示结算画面
                StringEventSystem.Global.Send(EventID.GameOver);
            }
        }
    }

    // 设置选项文本并调整字号
    private void SetOptionText(Text textComponent, string content)
    {
        textComponent.text = content;
        // 如果文本长度超过7个字符，缩小字号
        if (content.Length > 7)
        {
            textComponent.fontSize = 20; // 设置较小的字号
        }
        else
        {
            textComponent.fontSize = 30; // 恢复默认字号
        }
    }

    //加载Tiku_test.json文件，并解析数据
    public async Task<TiData[]> LoadTikuDataAsync()
    {
        ToastManager.Instance.ShowToast("请求题库中...");
        string PrefsTiNum = PlayerPrefs.GetString("TiNumGroup");
        tiNum = ChouseType.TiNumPrase(PrefsTiNum);
        Debug.Log("PrefsTiNum:"+PrefsTiNum);
        Debug.Log("tiNum:"+tiNum);
        var getResponse = await HttpClientService.Instance
            .Get("/question/getQuestions")
            .AddQueryParam("limit_nums", tiNum.ToString())
            .AddQueryParam("difficulty", "0") 
            .AddHeader("Cache-Control", "no-cache")
            .SendAsync();
            
        Debug.Log("题库数据："+getResponse.GetJson());
        if (getResponse.IsSuccess)
        {
            // 创建一个包装类来解析 JSON
            TiDataWrapper wrapper = JsonUtility.FromJson<TiDataWrapper>(getResponse.GetJson());

            if (wrapper == null || wrapper.data == null)
            {
                Debug.LogError("解析 JSON 失败，请检查 JSON 格式。");
                return null; // 返回 null 以避免后续错误
            }

            return wrapper.data; // 返回解析后的数组
        }else{
            //todo: 请求失败 重试逻辑
            return null;
        }
        
    }
}

// 创建一个包装类
[System.Serializable]
public class TiDataWrapper
{
    public int status;
    public TiData[] data; // 包含 TiData 数组
}

[System.Serializable] // 确保 TiData 类是可序列化的
public class TiData
{
    /**
     {
			"id": 1728,
			"question": "漫威系列电影中，谁最初提议组建「复仇者联盟」？",
			"answers": [
				"尼克·弗瑞",
				"杰克",
				"阿龙",
				"伦纳德"
			],
			"difficulty": 2,
			"correctAnswer": 1
		}
    */
    public int id;
    public string question;
    public int difficulty;
    public List<string> answers;
    public int correctAnswer;
}